package com.ruoyi.iot.mapper;

import com.ruoyi.iot.domain.entity.DeviceFaultWindow;
import java.time.LocalDateTime;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 故障窗口Mapper
 */
@Mapper
public interface DeviceFaultWindowMapper {

    /**
     * 查询最新窗口结束时间。
     *
     * @param deviceId 设备编号
     * @param granularityMinutes 聚合粒度
     * @return 最新窗口结束时间
     */
    LocalDateTime selectLatestWindowEnd(@Param("deviceId") String deviceId,
                                        @Param("granularityMinutes") int granularityMinutes);

    /**
     * 查询最新故障窗口。
     *
     * @param deviceId 设备编号
     * @param granularityMinutes 聚合粒度
     * @return 故障窗口
     */
    DeviceFaultWindow selectLatestWindow(@Param("deviceId") String deviceId,
                                         @Param("granularityMinutes") int granularityMinutes);

    /**
     * 批量插入窗口数据。
     *
     * @param list 窗口集合
     * @return 影响行数
     */
    int insertBatch(@Param("list") List<DeviceFaultWindow> list);

    /**
     * 按时间范围查询设备故障窗口记录。
     *
     * @param deviceId 设备编号
     * @param start    区间开始时间（含）
     * @param end      区间结束时间（含）
     * @return 故障窗口列表
     */
    List<DeviceFaultWindow> selectByRange(@Param("deviceId") String deviceId,
                                          @Param("start") LocalDateTime start,
                                          @Param("end") LocalDateTime end);
}
